﻿#region Copyright 
/*-------------------------------------------------------------------------
* 命名空间名称/文件名:    SSPivot.Common.Helpers/IdGeneratorHelper 
* CLR版本:     4.0.30319.42000
* 机器名称:    DESKTOP-NHMLO8A
* 功 能：       N/A
* 类 名：       IdGeneratorHelper
* 创建时间：  2025/5/22 11:58:57
* 版本号：      v1.0
* 创建人:        xulong
*-------------------------------------------------------------------------*/
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Yitter.IdGenerator;

namespace SSPivot.Common.Helpers
{
    /// <summary>
    /// Id生成器,包含Guid、时间+随机数、雪花算法生成Id。
    /// </summary>
    public class IdGeneratorHelper
    {
        public static ushort Your_Unique_Worker_Id = 1;
        /// <summary>
        /// 雪花飘逸算法生成ID
        /// </summary>
        /// <returns></returns>
        public static long IdSnowflake()
        {
            if (YitIdHelper.IdGenInstance == null)
            {
                IdGeneratorOptions options = new IdGeneratorOptions(Your_Unique_Worker_Id);
                // options.WorkerIdBitLength = 10; // 默认值6，限定 WorkerId 最大值为2^6-1，即默认最多支持64个节点。
                // options.SeqBitLength = 6; // 默认值6，限制每毫秒生成的ID个数。若生成速度超过5万个/秒，建议加大 SeqBitLength 到 10。
                // options.BaseTime = Your_Base_Time; // 如果要兼容老系统的雪花算法，此处应设置为老系统的BaseTime。
                // ...... 其它参数参考 IdGeneratorOptions 定义。 
                //DataCenterIdBitLength = 1,
                //TopOverCostCount = 2000,
                //TimestampType = 1,
                // MinSeqNumber = 1,
                // MaxSeqNumber = 200,
                // BaseTime = DateTime.Now.AddYears(-10),
                YitIdHelper.SetIdGenerator(options);
            }
            return YitIdHelper.NextId();
        }
        /// <summary>
        /// 自动生成编号/唯一订单号生成，时间戳+随机数，时间戳精确到毫秒，形如20052113254137177350
        /// </summary>
        /// <returns></returns>
        public static long CreateNoLong()
        {
            Random random = new Random();
            string strRandom = random.Next(10000, 99999).ToString(); //生成随机编号 
            string code = DateTime.Now.ToString("yyMMddHHmmssffff") + strRandom;//形如20052113254137177350
            return code.ToLong();
        }

        /// <summary>
        /// 表示全局唯一标识符 (GUID)。
        /// </summary>
        /// <returns></returns>
        public static string GuId()
        {
            return Guid.NewGuid().ToString();
        }
        /// <summary>
        /// 自动生成编号/唯一订单号生成，时间戳+随机数，时间戳精确到毫秒，形如2020052113254137177350
        /// </summary>
        /// <returns></returns>
        public static string CreateNo()
        {
            Random random = new Random();
            string strRandom = random.Next(10000, 99999).ToString(); //生成随机编号 
            string code = DateTime.Now.ToString("yyyyMMddHHmmssffff") + strRandom;//形如2020052113254137177350
            return code;
        }
    }
}
